package com.polaris.live.net.service

import com.polaris.live.common.network.ApiResponse
import com.polaris.live.resp.back_resp.BannerBean
import com.polaris.live.resp.back_resp.BannerListResp
import com.polaris.live.resp.back_resp.DisplayUserBean
import com.polaris.live.resp.back_resp.GameListResp
import com.polaris.live.resp.back_resp.HomeGameResp
import com.polaris.live.resp.back_resp.HonorRankResp
import com.polaris.live.resp.back_resp.LiveShowMessageResp
import com.polaris.live.resp.back_resp.MatchHeartbeatResp
import com.polaris.live.resp.back_resp.MatchMessageResp
import com.polaris.live.resp.back_resp.MatchStartResp
import com.polaris.live.resp.back_resp.MatchUserResp
import com.polaris.live.resp.back_resp.RegionDataResp
import com.polaris.live.resp.base.ListResp
import com.polaris.live.resp.go_resp.EndMatchBean
import com.polaris.live.resp.go_resp.MatchIdBean
import com.polaris.live.resp.go_resp.MatchStartBean
import com.polaris.live.resp.go_resp.UserIdsBean
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query

/**
 * 主页服务
 *
 * @author Created by 半仙 on 2023/10/9/009 15:49
 */
interface HomeService {

    /**
     * 获取分页数据
     */
    @GET("only-live/page")
    suspend fun getLivesList(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 侧边分页数据
     */
    @GET("only-live/sidebar/page")
    suspend fun liveSidebarPage(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>


    /**
     * 获取单个直播
     */
    @GET("lives/live")
    suspend fun getLivesLive(
        @Query("pageNumber") pageNumber: Int,
        @Query("currentUserId") currentUserId: Long? = null,
    ): ApiResponse<DisplayUserBean>

    /**
     * 获取单个直播
     *
     * @param type 0刷新，不是刷新随便传
     * @param currentUserId 当前的主播id
     */
    @GET("only-live/next")
    suspend fun getLiveSingle(
        @Query("pageNumber") type: Int,
        @Query("currentUserId") currentUserId: Long? = null,
    ): ApiResponse<DisplayUserBean>

    /**
     * 获取单个直播 Party
     *
     * @param type 0刷新，不是刷新随便传
     * @param currentUserId 当前的主播id
     */
    @GET("chat-party/next")
    suspend fun getLiveParty(
        @Query("currentUserId") currentUserId: Long? = null,
        @Query("filterLanguage") filterLanguage: String? = null,
        @Query("filterCountry") filterCountry: String? = null,
    ): ApiResponse<DisplayUserBean>

    /**
     * 获取单个游戏派对
     *
     * @param type 0刷新，不是刷新随便传
     * @param currentUserId 当前的主播id
     */
    @GET("game/next")
    suspend fun getLiveGame(
        @Query("currentUserId") currentUserId: Long? = null,
        @Query("filterLanguage") filterLanguage: String? = null,
        @Query("filterCountry") filterCountry: String? = null,
    ): ApiResponse<DisplayUserBean>

    /**
     * 派对游戏
     * 侧边分页数据
     */
    @GET("game/page")
    suspend fun getSidebarPartyGameList(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 匹配动效
     */
    @GET("match/animation")
    suspend fun getMatch(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 获取热门列表
     */
    @GET("hots/page")
    suspend fun getHotList(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 匹配展示信息
     */
    @GET("match/message")
    suspend fun getMatchMessage(): ApiResponse<MatchMessageResp>

    /**
     * 获取新人列表
     */
    @GET("newcomers/page")
    suspend fun getNewcomerList(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 获取推荐列表
     */
    @GET("recommends/recommend")
    suspend fun getRecommendList(@Query("currentUserId") currentUserId: Long? = null): ApiResponse<List<DisplayUserBean>>

    /**
     * 根据ids获取用户信息
     */
    @POST("display-user/users")
    suspend fun getDisplayUsers(@Body bean: UserIdsBean): ApiResponse<List<DisplayUserBean>>

    /**
     * 获取banner列表
     */
    @GET("banner/list")
    suspend fun getBannerList(@Query("channelType") channelType: Int): ApiResponse<List<BannerBean>>

    /**
     * 发起匹配
     */
    @POST("match/start")
    suspend fun matchStart(@Body matchStartBean: MatchStartBean): ApiResponse<MatchStartResp>

    /**
     * 结束匹配
     */
    @POST("match/end")
    suspend fun endMatch(@Body endMatchBean: EndMatchBean): ApiResponse<Any>

    /**
     * 匹配心跳
     */
    @POST("match/heartbeat")
    suspend fun matchHeartbeat(@Body matchIdBean: MatchIdBean): ApiResponse<MatchHeartbeatResp>

    /**
     * 匹配中动效
     */
    @GET("match/procedural-animation")
    suspend fun matchAnimation(): ApiResponse<List<String>>

    /**
     * 私信顶部推荐
     */
    @GET("single-top/list")
    suspend fun singleTop(): ApiResponse<List<DisplayUserBean>>

    /**
     * 获取结束页推荐数据
     */
    @GET("only-live/end-recommend")
    suspend fun getLivesRecommend(): ApiResponse<List<DisplayUserBean>>

    /**
     * 主页游戏推荐列表
     */
    @GET("game/recommend")
    suspend fun getHomeGameList(): ApiResponse<HomeGameResp>

    /**
     * 主页派对列表
     */
    @GET("chat-party/page")
    suspend fun getHomePartyList(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 关注数据 少于X人需要调用/recommend
     */
    @GET("follow/page")
    suspend fun getFollowLive(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 关注推荐
     */
    @GET("follow/recommend")
    suspend fun getFollowRecommend(): ApiResponse<List<DisplayUserBean>>

    /**
     * 派对
     * 侧边分页数据
     */
    @GET("chat-party/sidebar/page")
    suspend fun getSidebarPartyList(@Query("pageNumber") pageNumber: Int): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 获取结束页推荐数据
     */
    @GET("chat-party/end-recommend")
    suspend fun getPartyRecommend(): ApiResponse<List<DisplayUserBean>>

    /**
     * 获取游戏
     */
    @GET("game/v2/recommend")
    suspend fun getGameV2Recommend(): ApiResponse<GameListResp>

    /**
     * 匹配加入派对
     */
    @GET("match/join/party")
    suspend fun matchJoinParty(): ApiResponse<MatchUserResp>

    /**
     * 匹配加入游戏
     */
    @GET("match/join/game")
    suspend fun matchJoinGame(@Query("gameType") gameType: Int): ApiResponse<MatchUserResp>

    /**
     * 获取结束页推荐数据 游戏派对
     */
    @GET("game/end-recommend")
    suspend fun getGamePartyRecommend(): ApiResponse<List<DisplayUserBean>>

    /**
     * 获取直播展示信息消息
     */
    @GET("lives/show-message")
    suspend fun livesShowMessage(): ApiResponse<LiveShowMessageResp>

    /**
     * 获取banner列表，带提示
     */
    @GET("banner/banners")
    suspend fun getBannerListV2(@Query("channelType") channelType: Int): ApiResponse<BannerListResp>

    /**
     * 获取交友分页数据
     */
    @GET("chat-party/page")
    suspend fun getChatParty(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int? = null,
        @Query("filterRegion") filterRegion: Int? = null,
        @Query("filterLanguage") filterLanguage: String? = null,
        @Query("filterCountry") filterCountry: String? = null,
    ): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 获取分页数据
     */
    @GET("game/page")
    suspend fun getGamePage(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int? = null,
        @Query("filterLanguage") filterLanguage: String? = null,
        @Query("filterCountry") filterCountry: String? = null,
        @Query("filterGameType") filterGameType: Int? = null,
    ): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 获取最近加入的房间
     */
    @GET("room/recently")
    suspend fun getRoomRecently(): ApiResponse<List<DisplayUserBean>>

    /**
     * 获取关注的房间
     */
    @GET("room/followed")
    suspend fun getRoomFollowed(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int? = null,
    ): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 查找房间
     */
    @GET("room/info/number")
    suspend fun searchRoom(@Query("roomNumber") roomNumber: Long): ApiResponse<List<DisplayUserBean>>

    /**
     * 区域信息
     */
    @GET("resource/region")
    suspend fun getResourceRegion(): ApiResponse<RegionDataResp>

    /**
     * 获取加入的房间
     */
    @GET("room/joined")
    suspend fun getRoomJoined(
        @Query("pageNumber") pageNumber: Int,
        @Query("pageSize") pageSize: Int? = null,
    ): ApiResponse<ListResp<DisplayUserBean>>

    /**
     * 榜单荣耀
     */
    @GET("honor-ranks")
    suspend fun getHonorRanks(): ApiResponse<List<HonorRankResp>>
    /**
     * 获取房间推荐  当followed少于x人是调用
     */
    @GET("room/recommend")
    suspend fun getRoomRecommend(): ApiResponse<List<DisplayUserBean>>

}